package 代理设计模式;

import sun.rmi.runtime.NewThreadAction;

/*
    代理模式是Java开发中使用较多的一种设计模式,代理设计就是为其他对象提供一种代理以控制对这个对象的访问

    应用场景
        1、安全代理: 屏蔽对真实角色的直接访问
        2、远程代理: 通过代理类处理远程方法调用(BMI)
        3、延迟加载: 先加载轻量级的代理对象,真正需要的时候再加载真实对象
            例:需要开发一个大文档查看软件,大文档有大的图片,有可能一个图片有100MB,在打开文件时,不可能将所有的图片都显示出来,
              这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开
    分类
        1、静态代理(静态定义代理类)
        2、动态代理(动态生成代理类) --> JDK自带的动态代理,需要使用反射
 */
public class ProxyTest {

    public static void main(String[] args) {
        Server server = new Server();//创建真实的对象
        ProxyServer proxyServer = new ProxyServer(server);//传入代理中
        proxyServer.browse();
    }
}

//代理类
class ProxyServer implements NetWork{

    private Server server;

    public ProxyServer(Server server) {
        this.server = server;
    }

    public void check(){
        System.out.println("联网之前的网络检查...");
    }

    @Override
    public void browse() {
        check();
        this.server.browse();
    }
}

//被代理类
class Server implements NetWork{

    @Override
    public void browse() {
        System.out.println("网络连接...");
    }
}

//接口
interface NetWork{

    void browse();
}
